﻿// B. Two Arrays.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1417/B

RedDreamer 有一个由 n 个非负整数组成的数组 a 和一个不幸的整数 T。

长度为 m 的数组 b 的不幸度为 f(b)--1≤i<j≤m 且 bi+bj=T 的整数对（i,j）的个数。
RedDreamer 需要将 a 的每个元素涂成白色和黑色两种颜色之一（每个元素的颜色独立选择），然后创建两个数组 c 和 d，这样所有白色元素都属于 c
而所有黑色元素都属于 d（这两个数组中可能有一个为空）。RedDreamer 希望以 f(c)+f(d) 最小的方式绘制这些元素。

例如
如果 n=6，T=7，a=[1,2,3,4,5,6]，可以将第 1、4 和 5 个元素涂成白色，而将所有其他元素涂成黑色。因此 c=[1,4,5]，d=[2,3,6]，f(c)+f(d)=0+0=0；
如果 n=3，T=6，a=[3,3,3]，则可以将第 1 个元素涂成白色，而将所有其他元素涂成黑色。所以 c=[3]，d=[3,3]，f(c)+f(d)=0+1=1。
帮助 RedDreamer 以最佳方式绘制数组！

输入
第一行包含一个整数 t（1≤t≤1000）--测试用例数。然后是 t 个测试用例。

每个测试用例的第一行包含两个整数 n 和 T（1≤n≤105，0≤T≤109）--分别是数组中的元素数和倒霉整数。

第二行包含 n 个整数 a1、a2、......、an（0≤ai≤109）--数组的元素。

所有测试用例的 n 之和不超过 105。


输出
为每个测试用例打印 n 个整数：p1, p2, ..., pn（每个 pi 要么为 0 要么为 1），表示颜色。如果 pi 为 0，则 ai 为白色，属于数组 c，否则为黑色，属于数组 d。

如果有多个答案能使 f(c)+f(d) 的值最小，则打印其中任何一个。

InputCopy
2
6 7
1 2 3 4 5 6
3 6
3 3 3
OutputCopy
1 0 0 1 1 0
1 0 0



2
8 6
3 1 2 3 3 3 3 3
16 6
3 1 2 3 3 3 3 3 5 4 1 1 1 8 8 8

*/

 
#include <iostream>
#include <cstring>
#include <vector>
#include <unordered_map>

using namespace std;

const int N = 100010;
long long a[N];

int ans[N];
long long T, n, m;


void solve() {
	cin >> n >> m;
	memset(a, 0, sizeof a);
	memset(ans, -1, sizeof ans);
	unordered_map<long long, vector<int>> mm;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		mm[a[i]].push_back(i);
	}
	int last = -1;
	for (int i = 1; i <= n; i++) {
		if (ans[i] == -1) {
			// 3 4 3 4 3 4 3  M=7 
			// 可能将最后一个3放入到4那组 所以 此种想法错误
			/*int find = m-a[i];
			if (mm.count(find) != 0 && mm[find].size() != 0) {
				int idx = mm[find].back(); mm[find].pop_back();
				ans[i] = 1; ans[idx] = 0;
			}
			else {
				if (last == 1) {
					ans[i] = 0; last = 0;
				}
				else {
					ans[i] = 1; last = 1;
				}
			}*/
			if (a[i]*2 < m ) {
				ans[i] = 0;
			}
			else if (a[i]*2 > m ) {
				ans[i] = 1;
			}
			else {
				if (last == 1) {
					ans[i] = 0; last = 0;
				}
				else {
					ans[i] = 1; last = 1;
				}
			}
		}
	}

	for (int i = 1; i <= n; i++) {
		cout << ans[i] << " ";
	}
	cout << endl;

	return;
}


int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

 